// 导入数据库操作模块
const db = require('../db/index')

// 导入 bcryptjs
const bcrypt = require('bcryptjs')

// 用这个包来生成Token字符串
const jwt = require('jsonwebtoken')

// 导入全局配置文件
const config = require('../config')

exports.reguser = (req, res) => {

    // 获取客户端提交到服务器的用户信息
    const userinfo = req.body

    console.log(userinfo,'1111')
    // if (!userinfo.username || !userinfo.password) return res.cc('用户名或者密码不合法')

    // 定义sql语句，查询用户名是否被占用
    const sqlStr = 'SELECT * FROM ev_users WHERE username = ?'
    db.query(sqlStr, userinfo.username, (err, results) => {
        
        console.log(results)

        if (err) return res.cc(err)
        if (results.length > 0) return res.cc('用户名被占用，请更换其他用户名!')

        // 调用bcryptjs.hashSync()对密码进行加墨
        userinfo.password = bcrypt.hashSync(userinfo.password, 10)

        // 定义插入新用户的sql语句
        const sql = 'INSERT INTO ev_users SET ?'
        db.query(sql, {
            username: userinfo.username,
            password: userinfo.password,
            nickname:userinfo.nickname,
            email:userinfo.nickname,
            update_date:new Date()

        }, (err, results) => {
            if (err) return res.cc(err)
            if (results.affectedRows !== 1) return res.cc('注册用户失败，请稍后再试')

            res.cc('注册成功', 0)
        })
    })

}


exports.login = (req, res) => {
    // 接受表单数据
    const userinfo = req.body

    
    console.log(userinfo)

    //    定义sql语句
    const sql = "SELECT * FROM ev_users WHERE username = ?"

    //    查询用户信息
    db.query(sql, userinfo.username, (err, result) => {

        // 执行sql语句失败
        if (err) return res.cc(err)

        if (result.length !== 1) return res.cc('登录失败！')

        console.log(result[0].status)

        if(result[0].status != '1') return  res.cc('该账户已被锁定，请联系管理员')
        // 拿到用户输入的密码和数据库中存储的密码进行对比
        
        const compareResult = bcrypt.compareSync(userinfo.password, result[0].password)

        if (!compareResult) return res.cc('登录失败！')

        const user = {...result[0], password:'', user_pic:''}
        // 对用户的而信息进行加密，生成Token字符串

        const tokenStr = jwt.sign(user,config.jwtSecretKey,{expiresIn:config.expiresIn})
        
        // console.log(tokenStr)

        // 调用res.send()将Token响应给客户端
        res.send({
           status:0,
           message:'登录成功！',
           token:tokenStr
        })
        // res.cc("登录成功", 0)


    })

}


// 退出方法

exports.logout = (req,res) =>{
    res.cc('退出成功', 0)
}